package com.itheima.sh.dao;

import com.itheima.sh.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    List<User> findAllUsers();
    //根据id查询
    User queryUserById(@Param("id") Integer id);
    //插入数据
    void addUser(User user);
    //更新数据
    void updateUser(User user);
    //根据id删除
    void deleteUserById(Integer id);
    //需求：根据用户名和性别查询用户
    List<User> queryUserByUsernameAndSex(@Param("name") String username, @Param("gender") String sex);
    //需求：模拟用户登录，登录方法参数是Map集合，泛型都是String类型分别表示用户名和性别。
    List<User> login(Map<String,String> map);
    //需求：查询user表中的总记录数。
    int queryUserCount(@Param("user")String tableName);

    //需求：根据用户名和性别查询用户
    List<User> queryUserByUsernameAndSex2(@Param("username") String username, @Param("sex") String sex);
    //需求：查询id是1的数据，将查询的结果封装到Map<String,Object>中
    //根据id查询
    Map<String,Object> queryUserByIdMap(@Param("id") Integer id);
    /*
        ​	需求：查询数据表所有的数据封装到Map<String,User>集合中
        ​	要求： Key值为一条记录的主键，Value值为pojo的对象.
     */
    @MapKey("id")
    Map<String, Object> queryUserByIdMap2();


    /////////////////////////////////////动态sql///////////////////////////////////////
//    【需求】：查询**男性**用户，**如果输入了用户名，按用户名模糊查询**,如果**没有输入用户名，就查询所有男性用户**。
    List<User> queryUserBySexOrUsername(@Param("username")String username);

    /*
        编写一个查询方法，设置两个参数，一个是用户名，一个是住址。

        根据用户名或者住址查询所有男性用户:
            如果输入了用户名则按照用户名模糊查找，
            否则就按照住址查找，两个条件只能成立一个，
            如果都不输入就查找用户名为“孙悟空”的用户。
     */
    List<User> queryUserBySexOrUsernameOrAddr(@Param("username")String username,@Param("address")String address);

    /*
        如果输入了用户名按照用户名进行查询，
        如果输入住址，按住址进行查询，
        如果两者都输入，两个条件都要成立。
     */
    List<User> queryUserByUsernameAndAddr(@Param("username")String username,@Param("address")String address);
    /*
        案例：修改用户信息，如果参数user中的某个属性为null，则不修改。
     */
    void updateUser2(User user);

    /*
        需求：按照id值是1，2，3来查询用户数据；
     */
    List<User> queryUsersByIds(@Param("arrIds")Integer[] arrIds);


















}
